Next Generation Post Processing in Call of Duty: Advanced Warfare
#Post_Processing #CG #Entity_Talk
ActivisionのJorge Jimenez氏による
2014年のSIGGRAPH Advances in Real-Time Rendering in Games
http://advances.realtimerendering.com/s2014/
http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare
カバー範囲
Motion Blur
Depth of Field
Subsurface Scattering
Bloom
Motion Blur
TODO
Depth of Field
2レイヤーを使う (p88)
重なり云々とのバトル
前景と背景
カーネルの形 (p90)
Separable Hexagonal (White2011)・Octagonal (McIntosh2012)を試した
Separableな手法はscatter-as-you-gatherアプローチには適さなかった
普通に49-tapで円形にサンプルすることにした
Brute force approach (p92)
各サンプルのCoCを見て、現在のピクセルとかぶっているかを見る
それが前景かどうかを見る
background → foregroundでソート
ここExpensive
アルファを各サンプルに$ a = \frac{1}{\pi c^2}で適用
ブレンディング
Our approach (p93)
backgroundとforegroundを2レイヤーに分ける
2レイヤーには分けるが距離に応じてスムーズに分ける
最短のdepthから100 inch遠くなったら完全にbackground
Overview
Tiling (p99)
Tile Max: 各タイルごとに最も近いdepthと最大CoCを求める
Tile Neighborhood: 3x3フィルタで近傍タイルから上記の情報を集める
Presort (p100)
各ピクセルごとにCoCを計算
bg/fg分け
R11G11B10で吐き出す
R: CoC
G: Alpha * Background
B: Alpha * Foreground
Main (p101)
2Dカーネルで収集してくる
フォーカスギリギリのピクセルがブリーディングしないようToeを実装しておく
アルファ (p102)
vec4( accumColor, accumWeight )
普通にadditive blending
scatter-as-you-gatherなのでnormalization忘れないでね
Missing Background (p103)
foregroundをちょっとデカ目にぼかす
当たり前だけどデカくなる。人が対象だと太る (p105)
far fieldではbackgroundは簡単だと仮定してデカ目にぼかさないようにする
Prefilter (p107)
Prepassにフィルタを噛ます (p109)
Mainのカーネルの間を縫うように
普通に9-tapのbilateral
それぞれのレイヤーごとにフィルタを噛ますべき (p110)
PostにMedianを噛ます (p112)
Upsample (p119)
Unity Builtin PPSv2のDoF実装がこれ。差異が結構ある
https://github.com/Unity-Technologies/Graphics/blob/7d292932bec3b4257a4defaf698fc7d77e2027f5/com.unity.postprocessing/PostProcessing/Shaders/Builtins/DepthOfField.hlsl
Subsurface Scattering
TODO
Bloom
TODO